{{>licenseInfo}}
#pragma once

#include "{{modelNamePrefix}}BaseModel.h"
{{#imports}}{{{import}}}
{{/imports}}

{{#cppNamespaceDeclarations}}
namespace {{this}} 
{
{{/cppNamespaceDeclarations}}
{{#models}}
{{#model}}

/*
 * {{classname}}
 *
 * {{description}}
 */
class {{dllapi}} {{classname}} : public Model
{
public:
    virtual ~{{classname}}() {}
	bool FromJson(const TSharedPtr<FJsonObject>& JsonObject) final;
	void WriteJson(JsonWriter& Writer) const final;

    {{#vars}}
	{{#isEnum}}
	{{#allowableValues}}
	enum class {{{enumName}}}
	{
		{{#enumVars}}
		{{name}},
		{{/enumVars}}
  	};
	{{/allowableValues}}
	{{#description}}/* {{{description}}} */
	{{/description}}{{^required}}TOptional<{{/required}}{{{datatypeWithEnum}}}{{^required}}>{{/required}} {{name}}{{#required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/required}};
	{{/isEnum}}
	{{^isEnum}}
	{{#description}}/* {{{description}}} */
	{{/description}}{{^required}}TOptional<{{/required}}{{{datatype}}}{{^required}}>{{/required}} {{name}}{{#required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/required}};
	{{/isEnum}}
    {{/vars}}
};

{{/model}}
{{/models}}
{{#cppNamespaceDeclarations}}
}
{{/cppNamespaceDeclarations}}
